//类指针的使用规则

#include<iostream>
using namespace std;

class Stu
{
public: 
    Stu(string na, int a)
        :name(na),age(a)
    {
    }
    void dis()
    {
        cout<<this->name<<this->age<<endl; //隐形的传this指针
    }

    string name;
    int age;
};

int main ()
{
    Stu s1("jiao",23),s2("wei",22); //栈
    Stu *s3 = new Stu{"liu",24};    //堆

    string Stu::*ps = &Stu::name;   //指向数据成员的类指针  需要数据是public的，外界使用
    cout<<s1.*ps<<endl; 
    cout<<s3->*ps<<endl;
    
    //指向成员函数的类指针
    void (Stu::*pf)() = Stu::dis; //dis 函数名称为该子程序段的入口地址，所以直接用 Stu::dis;
    (s2.*pf)();  //栈上的
    (s3->*pf)(); //堆上的

    return 0;
}